﻿2026-05-10T11:51:53.8459933Z ##[group]Run pnpm verify:phase-5
2026-05-10T11:51:53.8460233Z [36;1mpnpm verify:phase-5[0m
2026-05-10T11:51:53.8473718Z shell: /usr/bin/bash -e {0}
2026-05-10T11:51:53.8473971Z env:
2026-05-10T11:51:53.8474203Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-10T11:51:53.8474504Z   SKIP_PHASE_3_CARRYOVER: 1
2026-05-10T11:51:53.8474719Z   SKIP_TRACE_CHECK: 1
2026-05-10T11:51:53.8474918Z ##[endgroup]
2026-05-10T11:51:54.1274776Z 
2026-05-10T11:51:54.1275849Z > rebno@0.0.0 verify:phase-5 /home/runner/work/rebno/rebno
2026-05-10T11:51:54.1276893Z > node scripts/verify-phase-5.mjs
2026-05-10T11:51:54.1277392Z 
2026-05-10T11:51:54.1573808Z 
2026-05-10T11:51:54.1574677Z === Phase 4 carry-over: verify-phase-4 ===
2026-05-10T11:51:54.1575505Z >>> pnpm verify:phase-4
2026-05-10T11:51:54.4628573Z 
2026-05-10T11:51:54.4629604Z > rebno@0.0.0 verify:phase-4 /home/runner/work/rebno/rebno
2026-05-10T11:51:54.4630543Z > node scripts/verify-phase-4.mjs
2026-05-10T11:51:54.4631078Z 
2026-05-10T11:51:54.4911844Z 
2026-05-10T11:51:54.4912869Z === Workspace: typecheck ===
2026-05-10T11:51:54.4913561Z >>> pnpm -r typecheck
2026-05-10T11:51:54.8331675Z Scope: 5 of 6 workspace projects
2026-05-10T11:51:54.8381469Z packages/db typecheck$ tsc --noEmit
2026-05-10T11:51:54.8389772Z packages/game-logic typecheck$ tsc --noEmit
2026-05-10T11:51:57.1917833Z packages/game-logic typecheck: Done
2026-05-10T11:51:57.1935610Z packages/protocol typecheck$ tsc --noEmit
2026-05-10T11:51:59.2603549Z packages/db typecheck: Done
2026-05-10T11:52:00.5531426Z packages/protocol typecheck: Done
2026-05-10T11:52:00.5537711Z apps/client typecheck$ tsc --noEmit
2026-05-10T11:52:00.5539980Z apps/server typecheck$ tsc --noEmit
2026-05-10T11:52:11.3068981Z apps/client typecheck: Done
2026-05-10T11:52:12.1996155Z apps/server typecheck: Done
2026-05-10T11:52:12.2067552Z 
2026-05-10T11:52:12.2068323Z === Lint: protocol-sync ===
2026-05-10T11:52:12.2069036Z >>> pnpm lint:protocol-sync
2026-05-10T11:52:12.4922264Z 
2026-05-10T11:52:12.4923350Z > rebno@0.0.0 lint:protocol-sync /home/runner/work/rebno/rebno
2026-05-10T11:52:12.4924322Z > node tools/scripts/lint-protocol-sync.mjs
2026-05-10T11:52:12.4924833Z 
2026-05-10T11:52:12.5226920Z lint-protocol-sync: OK
2026-05-10T11:52:12.5330897Z 
2026-05-10T11:52:12.5332769Z === Lint: game-logic-purity ===
2026-05-10T11:52:12.5333256Z >>> pnpm lint:game-logic-purity
2026-05-10T11:52:12.8342466Z 
2026-05-10T11:52:12.8343531Z > rebno@0.0.0 lint:game-logic-purity /home/runner/work/rebno/rebno
2026-05-10T11:52:12.8344639Z > node tools/scripts/lint-game-logic-purity.mjs
2026-05-10T11:52:12.8345138Z 
2026-05-10T11:52:12.8636841Z lint-game-logic-purity: OK (6 file(s) clean)
2026-05-10T11:52:12.8733189Z 
2026-05-10T11:52:12.8733871Z === Lint: better-auth-schema-sync ===
2026-05-10T11:52:12.8734488Z >>> pnpm lint:better-auth-schema-sync
2026-05-10T11:52:13.1615882Z 
2026-05-10T11:52:13.1617105Z > rebno@0.0.0 lint:better-auth-schema-sync /home/runner/work/rebno/rebno
2026-05-10T11:52:13.1618196Z > node tools/scripts/lint-better-auth-schema-sync.mjs
2026-05-10T11:52:13.1618768Z 
2026-05-10T11:52:14.5274430Z lint-better-auth-schema-sync: OK
2026-05-10T11:52:14.5368122Z 
2026-05-10T11:52:14.5377728Z === Lint: rate-limit-budgets ===
2026-05-10T11:52:14.5379616Z >>> pnpm lint:rate-limit-budgets
2026-05-10T11:52:14.8247502Z 
2026-05-10T11:52:14.8248545Z > rebno@0.0.0 lint:rate-limit-budgets /home/runner/work/rebno/rebno
2026-05-10T11:52:14.8249623Z > node tools/scripts/lint-rate-limit-budgets.mjs
2026-05-10T11:52:14.8250644Z 
2026-05-10T11:52:14.8548231Z lint-rate-limit-budgets: OK (5 D-22 budgets locked)
2026-05-10T11:52:14.8643902Z 
2026-05-10T11:52:14.8653370Z === Lint: no-clipboard-rce ===
2026-05-10T11:52:14.8655238Z >>> pnpm lint:no-clipboard-rce
2026-05-10T11:52:15.1484361Z 
2026-05-10T11:52:15.1485398Z > rebno@0.0.0 lint:no-clipboard-rce /home/runner/work/rebno/rebno
2026-05-10T11:52:15.1486584Z > node tools/scripts/lint-no-clipboard-rce.mjs
2026-05-10T11:52:15.1487137Z 
2026-05-10T11:52:15.1822617Z lint-no-clipboard-rce: OK (21 file(s) clean)
2026-05-10T11:52:15.1922425Z 
2026-05-10T11:52:15.1933421Z === Lint: room-layout ===
2026-05-10T11:52:15.1942397Z >>> pnpm lint:room-layout
2026-05-10T11:52:15.4883668Z 
2026-05-10T11:52:15.4884663Z > rebno@0.0.0 lint:room-layout /home/runner/work/rebno/rebno
2026-05-10T11:52:15.4885612Z > node tools/scripts/lint-room-layout.mjs
2026-05-10T11:52:15.4886169Z 
2026-05-10T11:52:15.5245621Z lint-room-layout: OK
2026-05-10T11:52:15.5332589Z 
2026-05-10T11:52:15.5333389Z === ADR 0004 lint ===
2026-05-10T11:52:15.5334036Z >>> pnpm lint:adr:0004
2026-05-10T11:52:15.8232460Z 
2026-05-10T11:52:15.8245336Z > rebno@0.0.0 lint:adr:0004 /home/runner/work/rebno/rebno
2026-05-10T11:52:15.8246892Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0004-room-hot-reload.md --no-matrix
2026-05-10T11:52:15.8247435Z 
2026-05-10T11:52:15.8520628Z OK: ADR docs/adr/0004-room-hot-reload.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-10T11:52:15.8617141Z 
2026-05-10T11:52:15.8626860Z === Drizzle: emit-check ===
2026-05-10T11:52:15.8628751Z >>> pnpm db:emit-check
2026-05-10T11:52:16.1517000Z 
2026-05-10T11:52:16.1523126Z > rebno@0.0.0 db:emit-check /home/runner/work/rebno/rebno
2026-05-10T11:52:16.1525645Z > pnpm -C packages/db exec drizzle-kit generate && node -e "require('fs').copyFileSync('packages/db/migrations/0001_baseline.sql','docs/extracted-server/0001_baseline.sql')" && git diff --exit-code packages/db/migrations/0001_baseline.sql docs/extracted-server/0001_baseline.sql
2026-05-10T11:52:16.1527637Z 
2026-05-10T11:52:16.5766117Z No config path provided, using default 'drizzle.config.ts'
2026-05-10T11:52:16.5768886Z Reading config file '/home/runner/work/rebno/rebno/packages/db/drizzle.config.ts'
2026-05-10T11:52:16.9173396Z 8 tables
2026-05-10T11:52:16.9174098Z accounts 8 columns 1 indexes 0 fks
2026-05-10T11:52:16.9234483Z audit_log 6 columns 0 indexes 2 fks
2026-05-10T11:52:16.9260797Z characters 9 columns 0 indexes 1 fks
2026-05-10T11:52:16.9267996Z inventory_items 4 columns 0 indexes 1 fks
2026-05-10T11:52:16.9362474Z legacy_credentials_staging 6 columns 0 indexes 0 fks
2026-05-10T11:52:16.9364439Z message_board_replies 5 columns 0 indexes 2 fks
2026-05-10T11:52:16.9365070Z message_board_topics 7 columns 0 indexes 1 fks
2026-05-10T11:52:16.9365721Z sessions 5 columns 0 indexes 1 fks
2026-05-10T11:52:16.9371796Z 
2026-05-10T11:52:16.9372703Z No schema changes, nothing to migrate 😴
2026-05-10T11:52:17.0107291Z 
2026-05-10T11:52:17.0108057Z === Drizzle: schema-sync ===
2026-05-10T11:52:17.0108996Z >>> pnpm lint:schema-sync
2026-05-10T11:52:17.2979569Z 
2026-05-10T11:52:17.2980689Z > rebno@0.0.0 lint:schema-sync /home/runner/work/rebno/rebno
2026-05-10T11:52:17.2983870Z > node -e "const a=require('fs').readFileSync('packages/db/migrations/0001_baseline.sql');const b=require('fs').readFileSync('docs/extracted-server/0001_baseline.sql');if(Buffer.compare(a,b)!==0){console.error('docs/extracted-server/0001_baseline.sql out of sync with packages/db/migrations/0001_baseline.sql');process.exit(1)}console.log('OK')"
2026-05-10T11:52:17.2986182Z 
2026-05-10T11:52:17.3239377Z OK
2026-05-10T11:52:17.3342848Z 
2026-05-10T11:52:17.3343408Z === Drizzle: source-comments ===
2026-05-10T11:52:17.3345323Z >>> pnpm lint:source-comments
2026-05-10T11:52:17.6222309Z 
2026-05-10T11:52:17.6223303Z > rebno@0.0.0 lint:source-comments /home/runner/work/rebno/rebno
2026-05-10T11:52:17.6224328Z > pnpm -C packages/db run lint:source-comments
2026-05-10T11:52:17.6224922Z 
2026-05-10T11:52:17.9118204Z 
2026-05-10T11:52:17.9119307Z > @rebno/db@0.1.0 lint:source-comments /home/runner/work/rebno/rebno/packages/db
2026-05-10T11:52:17.9120361Z > node scripts/check-source-comments.mjs
2026-05-10T11:52:17.9120906Z 
2026-05-10T11:52:17.9428890Z check-source-comments: OK (50 columns, all SOURCE-cited)
2026-05-10T11:52:17.9582058Z 
2026-05-10T11:52:17.9582826Z === Workspace: test ===
2026-05-10T11:52:17.9583435Z >>> pnpm -r test
2026-05-10T11:52:18.2516598Z Scope: 5 of 6 workspace projects
2026-05-10T11:52:18.2566436Z packages/game-logic test$ vitest run
2026-05-10T11:52:18.2575110Z packages/db test$ vitest run
2026-05-10T11:52:18.7468177Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-10T11:52:18.8383607Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-10T11:52:19.0533731Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 22[2mms[22m[39m
2026-05-10T11:52:19.3683433Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-10T11:52:19.6063516Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-10T11:52:19.7903697Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-10T11:52:19.8398597Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:52:19.8493215Z packages/game-logic test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-10T11:52:19.8543291Z packages/game-logic test: [2m      Tests [22m [1m[32m21 passed[39m[22m[90m (21)[39m
2026-05-10T11:52:19.8544437Z packages/game-logic test: [2m   Start at [22m 11:52:18
2026-05-10T11:52:19.8557171Z packages/game-logic test: [2m   Duration [22m 1.09s[2m (transform 132ms, setup 0ms, import 219ms, tests 52ms, environment 1ms)[22m
2026-05-10T11:52:19.8842799Z packages/game-logic test: Done
2026-05-10T11:52:19.8849849Z packages/protocol test$ vitest run
2026-05-10T11:52:20.4228547Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-10T11:52:20.5890068Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:52:20.8293627Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 21[2mms[22m[39m
2026-05-10T11:52:20.8471460Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:52:20.8614223Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-10T11:52:20.8639948Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-10T11:52:20.8662727Z packages/db test: [2m   Start at [22m 11:52:18
2026-05-10T11:52:20.8665942Z packages/db test: [2m   Duration [22m 2.01s[2m (transform 165ms, setup 0ms, import 1.38s, tests 30ms, environment 0ms)[22m
2026-05-10T11:52:20.8815670Z packages/db test: Done
2026-05-10T11:52:21.0093838Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-10T11:52:21.1829469Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:52:21.3226551Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:52:21.3274975Z packages/protocol test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-10T11:52:21.3289513Z packages/protocol test: [2m      Tests [22m [1m[32m30 passed[39m[22m[90m (30)[39m
2026-05-10T11:52:21.3294555Z packages/protocol test: [2m   Start at [22m 11:52:20
2026-05-10T11:52:21.3295958Z packages/protocol test: [2m   Duration [22m 894ms[2m (transform 130ms, setup 0ms, import 260ms, tests 35ms, environment 0ms)[22m
2026-05-10T11:52:21.3587392Z packages/protocol test: Done
2026-05-10T11:52:21.3593266Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-10T11:52:21.3595629Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-10T11:52:21.9213577Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-10T11:52:21.9243085Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-10T11:52:22.9165214Z apps/server test: {"level":30,"time":1778413942912,"pid":4383,"hostname":"runnervmeorf1","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-10T11:52:22.9208771Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 712[2mms[22m[39m
2026-05-10T11:52:22.9223376Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 563[2mms[22m[39m
2026-05-10T11:52:23.5093998Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-10T11:52:23.5096250Z apps/client test: [22m[39mroom_layout signature did not verify — rendering skipped for mvp-lobby 000
2026-05-10T11:52:23.5182594Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 169[2mms[22m[39m
2026-05-10T11:52:24.0584029Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 48[2mms[22m[39m
2026-05-10T11:52:24.6736914Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 123[2mms[22m[39m
2026-05-10T11:52:25.0064705Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-10T11:52:25.0083353Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-fM0p9z/rebno.db
2026-05-10T11:52:25.0091321Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:25.0093514Z apps/server test: [run-migrations] OK
2026-05-10T11:52:25.0198737Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-10T11:52:25.0202669Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-H0yrHa/rebno.db
2026-05-10T11:52:25.0204485Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:25.0206640Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-10T11:52:25.0208365Z apps/server test: [run-migrations] OK
2026-05-10T11:52:25.0256560Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-10T11:52:25.0273067Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-CBm2tj/rebno.db
2026-05-10T11:52:25.0292593Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:25.0299555Z apps/server test: [run-migrations] OK
2026-05-10T11:52:25.0302089Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-10T11:52:25.0310590Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-CBm2tj/rebno.db
2026-05-10T11:52:25.0313110Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:25.0314556Z apps/server test: [run-migrations] OK
2026-05-10T11:52:25.0392516Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 51[2mms[22m[39m
2026-05-10T11:52:25.3077773Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 23[2mms[22m[39m
2026-05-10T11:52:25.5705014Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 21[2mms[22m[39m
2026-05-10T11:52:25.7602704Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 102[2mms[22m[39m
2026-05-10T11:52:25.8432229Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-10T11:52:26.1649357Z apps/server test: {"level":40,"time":1778413946160,"pid":4507,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:52:26.1712055Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 18[2mms[22m[39m
2026-05-10T11:52:26.1833485Z apps/server test: {"level":40,"time":1778413946164,"pid":4507,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:52:26.1883229Z apps/server test: {"level":40,"time":1778413946165,"pid":4507,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:52:26.4181296Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-10T11:52:26.6373400Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:52:26.8903735Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 125[2mms[22m[39m
2026-05-10T11:52:27.4662424Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-10T11:52:27.4678024Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ⌁ auth for agents [www.vestauth.com]
2026-05-10T11:52:27.4695025Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-10T11:52:28.0652837Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 35[2mms[22m[39m
2026-05-10T11:52:28.2033479Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:52:28.4374776Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-10T11:52:28.4519208Z apps/server test: [2m Test Files [22m [1m[32m11 passed[39m[22m[90m (11)[39m
2026-05-10T11:52:28.4542995Z apps/server test: [2m      Tests [22m [1m[32m61 passed[39m[22m[90m (61)[39m
2026-05-10T11:52:28.4544021Z apps/server test: [2m   Start at [22m 11:52:21
2026-05-10T11:52:28.4552500Z apps/server test: [2m   Duration [22m 6.52s[2m (transform 497ms, setup 0ms, import 3.37s, tests 927ms, environment 2ms)[22m
2026-05-10T11:52:28.4815408Z apps/server test: Done
2026-05-10T11:52:28.8481438Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:52:29.5642109Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:52:30.2015028Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-10T11:52:30.7957512Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:52:31.3845022Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:52:31.9704482Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-10T11:52:32.5812744Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:52:33.1849075Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:52:33.7623591Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:52:34.3576722Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:52:34.9606738Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:52:34.9778143Z apps/client test: [2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
2026-05-10T11:52:34.9779626Z apps/client test: [2m      Tests [22m [1m[32m98 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (102)[39m
2026-05-10T11:52:34.9786327Z apps/client test: [2m   Start at [22m 11:52:21
2026-05-10T11:52:34.9787938Z apps/client test: [2m   Duration [22m 13.05s[2m (transform 526ms, setup 59ms, collect 803ms, tests 628ms, environment 7.35s, prepare 1.47s)[22m
2026-05-10T11:52:35.0990132Z apps/client test: Done
2026-05-10T11:52:35.1055634Z 
2026-05-10T11:52:35.1056092Z verify-phase-4: OK (12 steps green)
2026-05-10T11:52:35.1144387Z 
2026-05-10T11:52:35.1145003Z === Workspace: typecheck ===
2026-05-10T11:52:35.1145747Z >>> pnpm -r typecheck
2026-05-10T11:52:35.4012997Z Scope: 5 of 6 workspace projects
2026-05-10T11:52:35.4062395Z packages/db typecheck$ tsc --noEmit
2026-05-10T11:52:35.4070594Z packages/game-logic typecheck$ tsc --noEmit
2026-05-10T11:52:37.8412602Z packages/game-logic typecheck: Done
2026-05-10T11:52:37.8432375Z packages/protocol typecheck$ tsc --noEmit
2026-05-10T11:52:39.8258748Z packages/db typecheck: Done
2026-05-10T11:52:41.0619334Z packages/protocol typecheck: Done
2026-05-10T11:52:41.0626188Z apps/server typecheck$ tsc --noEmit
2026-05-10T11:52:41.0628772Z apps/client typecheck$ tsc --noEmit
2026-05-10T11:52:51.6318115Z apps/client typecheck: Done
2026-05-10T11:52:52.4183177Z apps/server typecheck: Done
2026-05-10T11:52:52.4256721Z 
2026-05-10T11:52:52.4257430Z === Lint: deploy-stack ===
2026-05-10T11:52:52.4258088Z >>> pnpm lint:deploy-stack
2026-05-10T11:52:52.7063632Z 
2026-05-10T11:52:52.7064654Z > rebno@0.0.0 lint:deploy-stack /home/runner/work/rebno/rebno
2026-05-10T11:52:52.7065751Z > node tools/scripts/lint-deploy-stack.mjs
2026-05-10T11:52:52.7066312Z 
2026-05-10T11:52:52.7354822Z lint-deploy-stack: OK
2026-05-10T11:52:52.7450262Z 
2026-05-10T11:52:52.7451112Z === Lint: deploy-stack test ===
2026-05-10T11:52:52.7452077Z >>> pnpm lint:deploy-stack:test
2026-05-10T11:52:53.0214863Z 
2026-05-10T11:52:53.0215931Z > rebno@0.0.0 lint:deploy-stack:test /home/runner/work/rebno/rebno
2026-05-10T11:52:53.0216980Z > node tools/scripts/lint-deploy-stack.test.mjs
2026-05-10T11:52:53.0217588Z 
2026-05-10T11:52:53.0785675Z PASS: lint-deploy-stack green
2026-05-10T11:52:53.0879361Z 
2026-05-10T11:52:53.0880102Z === ADR 0005 lint ===
2026-05-10T11:52:53.0880777Z >>> pnpm lint:adr:0005
2026-05-10T11:52:53.3686409Z 
2026-05-10T11:52:53.3687497Z > rebno@0.0.0 lint:adr:0005 /home/runner/work/rebno/rebno
2026-05-10T11:52:53.3688837Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0005-deploy-topology.md --no-matrix
2026-05-10T11:52:53.3689621Z 
2026-05-10T11:52:53.3981276Z OK: ADR docs/adr/0005-deploy-topology.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-10T11:52:53.4072227Z 
2026-05-10T11:52:53.4073221Z === ADR 0006 lint ===
2026-05-10T11:52:53.4074273Z >>> pnpm lint:adr:0006
2026-05-10T11:52:53.6863555Z 
2026-05-10T11:52:53.6864612Z > rebno@0.0.0 lint:adr:0006 /home/runner/work/rebno/rebno
2026-05-10T11:52:53.6868151Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0006-observability-stack.md --no-matrix
2026-05-10T11:52:53.6872383Z 
2026-05-10T11:52:53.7134082Z OK: ADR docs/adr/0006-observability-stack.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-10T11:52:53.7217754Z 
2026-05-10T11:52:53.7218412Z === Workspace: test ===
2026-05-10T11:52:53.7219426Z >>> pnpm -r test
2026-05-10T11:52:54.0065514Z Scope: 5 of 6 workspace projects
2026-05-10T11:52:54.0113678Z packages/db test$ vitest run
2026-05-10T11:52:54.0121719Z packages/game-logic test$ vitest run
2026-05-10T11:52:54.5064139Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-10T11:52:54.5070432Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-10T11:52:54.8203695Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 19[2mms[22m[39m
2026-05-10T11:52:55.0577149Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-10T11:52:55.2866676Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-10T11:52:55.4333574Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-10T11:52:55.5022772Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:52:55.5113146Z packages/game-logic test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-10T11:52:55.5145950Z packages/game-logic test: [2m      Tests [22m [1m[32m21 passed[39m[22m[90m (21)[39m
2026-05-10T11:52:55.5157265Z packages/game-logic test: [2m   Start at [22m 11:52:54
2026-05-10T11:52:55.5173141Z packages/game-logic test: [2m   Duration [22m 1.00s[2m (transform 107ms, setup 0ms, import 197ms, tests 50ms, environment 1ms)[22m
2026-05-10T11:52:55.5491296Z packages/game-logic test: Done
2026-05-10T11:52:55.5512558Z packages/protocol test$ vitest run
2026-05-10T11:52:55.6590470Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:52:56.0453779Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-10T11:52:56.4613816Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:52:56.4657385Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-10T11:52:56.4658776Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-10T11:52:56.4659824Z packages/db test: [2m   Start at [22m 11:52:54
2026-05-10T11:52:56.4661212Z packages/db test: [2m   Duration [22m 1.95s[2m (transform 145ms, setup 0ms, import 1.37s, tests 27ms, environment 0ms)[22m
2026-05-10T11:52:56.4693063Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 21[2mms[22m[39m
2026-05-10T11:52:56.4940036Z packages/db test: Done
2026-05-10T11:52:56.6373313Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-10T11:52:56.7892181Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:52:56.9236512Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:52:56.9267982Z packages/protocol test: [2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
2026-05-10T11:52:56.9269979Z packages/protocol test: [2m      Tests [22m [1m[32m30 passed[39m[22m[90m (30)[39m
2026-05-10T11:52:56.9271161Z packages/protocol test: [2m   Start at [22m 11:52:56
2026-05-10T11:52:56.9272964Z packages/protocol test: [2m   Duration [22m 875ms[2m (transform 158ms, setup 0ms, import 279ms, tests 35ms, environment 0ms)[22m
2026-05-10T11:52:56.9596136Z packages/protocol test: Done
2026-05-10T11:52:56.9601365Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-10T11:52:56.9603628Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-10T11:52:57.4598293Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-10T11:52:57.5093468Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-10T11:52:58.4313710Z apps/server test: {"level":30,"time":1778413978425,"pid":5249,"hostname":"runnervmeorf1","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-10T11:52:58.4320725Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 690[2mms[22m[39m
2026-05-10T11:52:58.4343167Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 543[2mms[22m[39m
2026-05-10T11:52:58.9564389Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-10T11:52:58.9603574Z apps/client test: [22m[39mroom_layout signature did not verify — rendering skipped for mvp-lobby 000
2026-05-10T11:52:58.9717471Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 156[2mms[22m[39m
2026-05-10T11:52:59.4204923Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-10T11:52:59.4219627Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-aqpWwH/rebno.db
2026-05-10T11:52:59.4221011Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:59.4222271Z apps/server test: [run-migrations] OK
2026-05-10T11:52:59.4372538Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-10T11:52:59.4393564Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-1cgkW2/rebno.db
2026-05-10T11:52:59.4437974Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:59.4453301Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-10T11:52:59.4492168Z apps/server test: [run-migrations] OK
2026-05-10T11:52:59.4513009Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-10T11:52:59.4532875Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-eOPou6/rebno.db
2026-05-10T11:52:59.4560424Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:59.4602219Z apps/server test: [run-migrations] OK
2026-05-10T11:52:59.4633015Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-10T11:52:59.4634786Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-eOPou6/rebno.db
2026-05-10T11:52:59.4676120Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-10T11:52:59.4692442Z apps/server test: [run-migrations] OK
2026-05-10T11:52:59.4713043Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 59[2mms[22m[39m
2026-05-10T11:52:59.9971952Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 110[2mms[22m[39m
2026-05-10T11:53:00.5327445Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 57[2mms[22m[39m
2026-05-10T11:53:00.8128732Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 24[2mms[22m[39m
2026-05-10T11:53:01.0449719Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 121[2mms[22m[39m
2026-05-10T11:53:01.0563846Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 22[2mms[22m[39m
2026-05-10T11:53:01.3243303Z apps/server test: {"level":40,"time":1778413981318,"pid":5355,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:53:01.3303234Z apps/server test: {"level":40,"time":1778413981321,"pid":5355,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:53:01.3343449Z apps/server test: {"level":40,"time":1778413981322,"pid":5355,"hostname":"runnervmeorf1","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-10T11:53:01.3393172Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-10T11:53:01.6254666Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 23[2mms[22m[39m
2026-05-10T11:53:01.8507717Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:53:02.0648183Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-10T11:53:02.0819526Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 99[2mms[22m[39m
2026-05-10T11:53:02.2918238Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:53:03.0106787Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-10T11:53:03.0123642Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ⌘ suppress logs { quiet: true }
2026-05-10T11:53:03.0142647Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-10T11:53:03.1392488Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 35[2mms[22m[39m
2026-05-10T11:53:03.7460616Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:53:03.7536516Z apps/server test: [2m Test Files [22m [1m[32m11 passed[39m[22m[90m (11)[39m
2026-05-10T11:53:03.7552938Z apps/server test: [2m      Tests [22m [1m[32m61 passed[39m[22m[90m (61)[39m
2026-05-10T11:53:03.7573195Z apps/server test: [2m   Start at [22m 11:52:57
2026-05-10T11:53:03.7574689Z apps/server test: [2m   Duration [22m 6.28s[2m (transform 417ms, setup 0ms, import 3.15s, tests 923ms, environment 2ms)[22m
2026-05-10T11:53:03.7808431Z apps/server test: Done
2026-05-10T11:53:03.9869494Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-10T11:53:04.6789326Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:53:05.2927586Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-10T11:53:05.9092849Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-10T11:53:06.4903292Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-10T11:53:07.0628902Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-10T11:53:07.6489776Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-10T11:53:08.2414881Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:53:08.8190726Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:53:09.3985351Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:53:09.9962042Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 4[2mms[22m[39m
2026-05-10T11:53:10.0129413Z apps/client test: [2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
2026-05-10T11:53:10.0133884Z apps/client test: [2m      Tests [22m [1m[32m98 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (102)[39m
2026-05-10T11:53:10.0135239Z apps/client test: [2m   Start at [22m 11:52:57
2026-05-10T11:53:10.0136855Z apps/client test: [2m   Duration [22m 12.50s[2m (transform 517ms, setup 43ms, collect 747ms, tests 594ms, environment 7.17s, prepare 1.50s)[22m
2026-05-10T11:53:10.1307710Z apps/client test: Done
2026-05-10T11:53:10.1377724Z 
2026-05-10T11:53:10.1378388Z === Traceable-reqs: check ===
2026-05-10T11:53:10.1379038Z >>> pnpm trace:check
2026-05-10T11:53:10.4163627Z 
2026-05-10T11:53:10.4164624Z > rebno@0.0.0 trace:check /home/runner/work/rebno/rebno
2026-05-10T11:53:10.4165542Z > traceable-reqs check
2026-05-10T11:53:10.4165933Z 
2026-05-10T11:53:10.4196166Z sh: 1: traceable-reqs: not found
2026-05-10T11:53:10.4325635Z  ELIFECYCLE  Command failed.
2026-05-10T11:53:10.4465112Z 
2026-05-10T11:53:10.4466211Z verify-phase-5 FAILED at step 'Traceable-reqs: check': pnpm trace:check (exit 1)
2026-05-10T11:53:10.4467332Z Fix the failing step and re-run `pnpm verify:phase-5`.
2026-05-10T11:53:10.4618195Z  ELIFECYCLE  Command failed with exit code 1.
2026-05-10T11:53:10.4755744Z ##[error]Process completed with exit code 1.
